#ifndef AUDIO_OUT_H_
#define AUDIO_OUT_H_

#include <iostream>
#include <vector>
#include <list>

#include <al/al.h>
#include <al/alc.h>

#include <windows.h>

#include "Buffer2.h"

#ifndef NULL
#define NULL 0
#endif /* NULL */

#define BUFFER_SIZE (4410 * 2)

class IAudioOut
{
public:
	IAudioOut(IBuffer2*);
	~IAudioOut();

	char		**detectDevice(void);
	void		selectOutDevice(char *);
	void		selectOutDevice(int);
	void		autoSelectOutDevice(void);


	// faire un objet source avec ca, pas possible de faire plusieurs audioOut (un seul selectDevice, CreateContext (faire une fonction pour ca?))

	void		start(void);
	void		stop(void);
	void		run(void);


	static void treat(IBuffer2*, void*);
private:
	void		checkRun();
	void		stream(ALuint);
	void		checkError(char*);

	char			*_deviceList;
	char			**_deviceTable;
	bool			_run;
	IBuffer2		*_buf;
	bool			_sourceRun;

	int				_useBuf;
	ALCcontext		*_ctx;
	std::list<ALuint>			_freeALBuf;
	std::list<ALuint>			_usedALBuf;
	ALuint			_source;
	ALCdevice		*_currentDevice;
};

#endif
